package org.example.GaoDeMap;

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;


public class GaodMap {
    public static final String MAP_KEY = "6cb244f1a67c3bf042f489c2be3b76dc";


    public static void main(String[] args) {
//        String startPoint="113.568824,34.807564";
//        String endPoint="113.657485,34.745224";

        String startPoint="106.765094,31.874737";
        String endPoint="104.06564,30.6574";
        //59.0190199454325
        Double dis = getDis(Double.parseDouble(startPoint.substring(startPoint.indexOf(",")+1)),
                Double.parseDouble(startPoint.substring(0,startPoint.indexOf(","))),
                Double.parseDouble(endPoint.substring(endPoint.indexOf(",")+1)),
                Double.parseDouble(endPoint.substring(0,endPoint.indexOf(","))));
        System.out.println("计算距离结果:"+dis);

        long distance = getDistance(startPoint, endPoint);
        System.out.println("api调用距离结果:巴中距离成都"+distance+"米");
    }

    /**
	 * 1.直接程序计算
	 */
    public static Double getDis(Double lat1,Double lon1,Double lat2,Double lon2 ){
        Double radLat1=(lat1 * Math.PI) /180;
        Double radLat2=(lat2 * Math.PI) /180;
        Double a=radLat1-radLat2;
        Double b=(lon1 * Math.PI) /180 -(lon2 * Math.PI)/180;
        Double s=2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(
                Math.sin(b / 2), 2)));
        s=s* 6378137.0;
        return s;
    }


    /**
     * 2.经纬度算出两点距离（通过api调用计算）
	 */
    public static long getDistance(String startLonLat, String endLonLat){
        //返回起始地startAddr与目的地endAddr之间的距离，单位：米
        Long result = new Long(0);
        String queryUrl = "http://restapi.amap.com/v3/distance?key="+MAP_KEY+"&origins="+startLonLat+"&destination="+endLonLat+"&type=0";
        String queryResult = HttpUtil.get(queryUrl);
        //System.out.println(queryResult);
        JSONObject job  = JSONObject.parseObject(queryResult);
        JSONArray  ja   = job.getJSONArray("results");
        JSONObject jobO = JSONObject.parseObject(ja.getString(0));
        result = Long.parseLong(jobO.get("distance").toString());
        //System.out.println("距离："+result);
        return result;
    }

}

